'use strict';

const crypto = require('crypto');

// 生成token
const generateToken = (code, deviceId) => {
  const secret = process.env.TOKEN_SECRET || 'your-secret-key';
  const timestamp = Date.now();
  const data = `${code}:${deviceId}:${timestamp}`;
  return crypto.createHmac('sha256', secret).update(data).digest('hex');
};

// 获取设备ID
const getDeviceId = async (context) => {
  try {
    const { CLIENTUA, PLATFORM, MODEL, SYSTEM, BRAND } = context;
    if (!CLIENTUA) return null;
    
    // 使用更稳定的设备特征组合生成ID
    const deviceInfo = [
      PLATFORM,    // 平台（iOS/Android）
      MODEL,       // 设备型号
      SYSTEM,      // 系统版本
      BRAND,       // 设备品牌
      CLIENTUA     // 用户代理
    ].filter(Boolean).join(':');
    
    return crypto.createHash('md5').update(deviceInfo).digest('hex');
  } catch (error) {
    console.error('获取设备ID失败:', error);
    return null;
  }
};

exports.main = async (event, context) => {
  const { code } = event;
  
  if (!code) {
    return {
      success: false,
      message: '卡密不能为空'
    };
  }

  try {
    // 获取设备ID
    const deviceId = await getDeviceId(context);
    if (!deviceId) {
      return {
        success: false,
        message: '无法获取设备信息'
      };
    }

    const db = uniCloud.database();
    const codeCollection = db.collection('activation_codes');
    
    // 查询卡密，同时查询未使用和已使用但属于同一设备的卡密
    const { data } = await codeCollection.where({
      code: code,
      $or: [
        { status: 'unused' },  // 未使用的卡密
        { 
          status: 'used',
          deviceId: deviceId   // 已使用但属于同一设备的卡密
        }
      ]
    }).get();

    if (data && data.length > 0) {
      const codeInfo = data[0];
      
      // 检查是否已绑定其他设备
      if (codeInfo.status === 'used' && codeInfo.deviceId && codeInfo.deviceId !== deviceId) {
        return {
          success: false,
          message: '该卡密已在其他设备上使用'
        };
      }
      
      // 生成token
      const token = generateToken(code, deviceId);
      
      // 更新卡密信息
      const updateData = {
        status: 'used',  // 标记为已使用
        lastLoginTime: Date.now(),
        deviceId: deviceId,
        deviceInfo: {
          platform: context.PLATFORM || '',
          model: context.MODEL || '',
          system: context.SYSTEM || '',
          brand: context.BRAND || '',
          ua: context.CLIENTUA || ''
        },
        lastLoginIP: context.CLIENTIP || '',  // 保留IP信息用于记录，但不用于设备识别
        lastLoginUA: context.CLIENTUA || '',
        updateTime: Date.now()
      };
      
      await codeCollection.where({
        code: code
      }).update(updateData);

      return {
        success: true,
        token,
        deviceId,
        message: '登录成功'
      };
    } else {
      // 检查卡密是否存在但状态为禁用
      const disabledCode = await codeCollection.where({
        code: code,
        status: 'disabled'
      }).get();
      
      if (disabledCode.data && disabledCode.data.length > 0) {
        return {
          success: false,
          message: '该卡密已被禁用'
        };
      }
      
      return {
        success: false,
        message: '卡密无效或已被其他设备使用'
      };
    }
  } catch (error) {
    console.error('登录验证失败:', error);
    return {
      success: false,
      message: '登录验证失败，请稍后重试'
    };
  }
}; 